package com.ld.common.util;

import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import com.ld.shieldsb.common.composition.util.ConvertUtil;
import com.ld.shieldsb.common.core.util.StringUtils;

import lombok.extern.slf4j.Slf4j;

/**
 * 全局共享变量工具
 * 
 * @ClassName SharedVarsUtil
 * @author <a href="mailto:donggongai@126.com" target="_blank">吕凯</a>
 * @date 2019年1月14日 下午2:13:22
 *
 */
@Slf4j
public class SharedVarsUtil {
    public static final Map<String, Object> SHARED_VARS = new HashMap<>(); // 全局共享变量

    public static void setSharedVars(String key, Object value) {
        SHARED_VARS.put(key, value);
    };

    public static Object getSharedVars(String key) {
        return SHARED_VARS.get(key);
    };

    /**
     * 处理内置变量
     * 
     * @Title delInnerVars
     * @author 吕凯
     * @date 2019年1月14日 下午2:14:18
     * @param attVal
     * @param model
     * @return String
     */
    public static <T> String delInnerVars(String attVal, T model) { // 后台路径(不包含域名、端口)
        if (StringUtils.isEmpty(attVal)) {
            return attVal;
        }
        Set<String> keyset = SharedVarsUtil.SHARED_VARS.keySet();
        for (String key : keyset) {
            // 去除大括号前后的空格
            attVal = attVal.replaceAll("\\$\\{\\s*?" + key + "\\s*?\\}", SharedVarsUtil.SHARED_VARS.get(key) + "");
        }
        if (model != null) {
            Map<String, String> modelMap; // 处理model内置变量
            try {
                modelMap = ConvertUtil.obj2Map(model);
                for (String key : modelMap.keySet()) {
                    // 去除大括号前后的空格
                    attVal = attVal.replaceAll("\\$\\{\\s*?" + key + "\\s*?\\}", modelMap.get(key) + "");
                }
            } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
                log.error("类型转换错误", e);
            } // 值为string
        }
        return attVal;
    };

}
